ggplot2 绘图Summary
- 总体介绍 -R语言四套绘图系统:
基础绘图系统(base R graphics)
grid图形系统 (grid graphics)
lattice绘图系统 (the lattice system)
ggplot2绘图系统 (the ggplot2 system)
基础绘图系统(graphics包):plot, boxplot, hist….
grid绘图系统:低于标准绘图系统,最灵活,无统计图形以及完整的绘图函数;
Lattice绘图系统:基于grid,是S-PLUS里的Trellis图形在R中的实现。Trellis是多元数据可视化的方法,特别适用于发现各变量之间的相互作用关系;
ggplot2绘图系统:基于grid,通过对独立的图形部件的组合(layers)进行绘图,美观,灵活;
- ggplot绘图
数据(data)
映射(mapping)
数据与图形属性(横纵坐标,大小,颜色,形状)的关联,aes()
每个图形属性可以映射为一个变量或者设定为一个常数
几何对象(geom)
控制生成图像的类型
geom_point(): 散点图
geom_line(): 折线图
geom_histogram(): 直方图
统计变换(stats)
以某种方式对数据进行汇总
stat_smoth():添加光滑曲线
标度(scale)
将数值转化为大小,颜色,位置,形状等信息
坐标系(coord)
笛卡尔坐标系
极坐标系
分面(facet)
将数据子集绘制到同一页面的不同面板中
主题(theme)
控制非数据元素外观,如标题,背景,坐标轴标签等
存储和输出(ggsave)
- 基本数据操作
ggplot2进行数据分组时只能根据行,
因此需要把数据化“宽”为“长”
reshape2
library(reshape2)
melt(data[,c(“S0h1”,”S0h2”)], measure.vars = c(“S0h1”,”S0h2”))
主要参数: melt(data, id.vars, measure.vars)
data:待变形的原始数据
id.vars:变形后依旧单独占据一列,位置保持不变的变量,通常是离散且预先给定的
measure.vars:需要被放在同一列的变量,根据原变量名进行分组,变量用来记录每行数据原来属于哪一列
- 实战演练
载入所需程序包
library(ggplot2)
library(reshape2)读入数据
data <- read.table(“heatmap_rpkm.txt”,header=T,sep=”\t”,row.names=1)
head(data)
data = log2(data+0.01)
数据,映射,几何对象
散点图
p1 <- ggplot(data, aes(S0h1, S0h2)) + geom_point()+theme_bw()
p1
#theme_bw():A theme with white background and black gridlines. 与白色背景和黑色网格线的一个主题。
#背景色为白色:p+ theme_set(theme_bw())
#去掉网格线:p+theme(panel.grid.major=element_line(colour=NA))
折线图
p2 <- ggplot(data, aes(S0h1, S0h2)) + geom_line()
p2
柱状图
p3 <- ggplot(data, aes(S0h1)) + geom_histogram(bins=20)
p3
箱线图, 抖点图
data.melt <- melt(data[,c(“S0h1”,”S0h2”)])
p4 <- ggplot(data.melt, aes(variable, value)) + geom_boxplot() + geom_jitter()
p4
统计变换
p5 <- ggplot(data, aes(S0h1, S0h2)) + geom_point() + stat_smooth(method = “lm”, formula = y ~ x)
p5
设置颜色
p6 <- ggplot(data.melt, aes(variable, value)) + geom_boxplot(fill=c(“red”,”blue”)) + geom_jitter(aes(color=variable))
p6
设置形状
p7 <- ggplot(data.melt, aes(variable, value)) + geom_boxplot() + geom_jitter(shape=10)
p7
设置透明度
p8 <- ggplot(data.melt, aes(variable, value)) + geom_boxplot() + geom_jitter(alpha=.5)
p8
设置大小
p9 <- ggplot(data.melt, aes(variable, value)) + geom_boxplot() + geom_jitter(size=3)
p9
图层叠加
p10 <- ggplot(data.melt, aes(variable, value)) + geom_boxplot() + geom_jitter(shape=10)+geom_jitter(alpha=.5,size=3)
p10
标度
将连续或离散的变量值映射到颜色
# geom_jitter(aes(color=value):将value值映射到颜色
p19 <- ggplot(data.melt, aes(variable, value)) + geom_jitter(aes(color=value))+
scale_color_gradient(“rpkm”,low=”black”, high=”pink”)
# geom_jitter(aes(color=variable):将variable值映射到颜色
p20 <- ggplot(data.melt, aes(variable, value)) + geom_jitter(aes(color=variable))+
scale_color_brewer(“replicate”, breaks=c(“S0h1”,”S0h2”),
labels=c(“rep1”,”rep2”), palette = “Set2”) ##palette调色板
主题
# labs:设置图片以及图例标题
# xlab,ylab:xy坐标轴标题
# theme:字体大小,颜色,位置等
p6 <- ggplot(data.melt, aes(variable, value)) + geom_boxplot(fill=c(“red”,”blue”)) + geom_jitter(aes(color=variable))
p12 <- p6 + theme_bw() + labs(title = “bw”)#白色背景
p12
p13 <- p6 + theme_grey() + labs(title = “grey”)#默认浅灰色背景
p13
p14 <- p6 + theme_bw() + labs(title =”legend”, col=”samples”) +
xlab(“sample”) + ylab(“log2(rpkm)”) +
theme(axis.text = element_text(size = 14),
plot.title = element_text(hjust = 0.5))
p15 <- p6 + theme_bw() + labs(col=”samples”) +
xlab(“sample”) + ylab(“log2(rpkm)”) +
theme(axis.text = element_text(size = 14), legend.position = “top”)
添加图形注解
添加竖直线
p16 <- p1 + geom_vline(xintercept = c(0,5), color=”red”)
添加矩形元素
p17 <- p1 + geom_rect(xmin=-5, xmax=5, ymin=-5, ymax=5, alpha=.01, fill=”orange”)
添加文字注释
p18 <- p1 + geom_text(x=5, y=0, label=”correlation between the\ntwo replicates”)